package com.hsh.txt 
{
	import com.hsh.graph.Pos;
	import flash.utils.Dictionary;
	/**
	 * ...
	 * @author Jean-Marie@home
	 */
	public class Marge 
	{	
		private var _val:Dictionary = new Dictionary(false);
		public static const PROP:Vector.<String> = new < String > [ "gauche", "droite", "haut", "bas", "indentation", "interligne", "ecartement", "alignHor", "alignVer"];
		
		public function Marge() 
		{
			emarger(3, 3, 3, 3, 0, 0, 0);
		}
		
		public function siModif(pr:String, alt:*, callback:Function):void 
		{
			if (_val[pr] != alt)
			{
				_val[pr] = alt;
				callback();
			}
		}
		
		/**
		 * Définit l'alignement horizontal et vertical
		 * @param	hAli	alignement horizontal
		 * @param	vAli	alignement vertical
		 */
		public function aligner(hAli:Pos, vAli:Pos):void
		{
			alignHor = hAli;
			alignVer = vAli;
		}
		
		/**
		 * Détruit les variables
		 */
		public function detruire():void
		{
			for (var i:int = 0; i < PROP.length; i++)
			{
				delete _val[PROP[i]];
			}
			_val = null;
		}
		
		/**
		 * Définition des marges
		 * @param	g	gauche
		 * @param	d	droite
		 * @param	h	haut
		 * @param	b	bas
		 * @param	indent	indentation de paragraphe
		 * @param	inlgn	espace entre les lignes
		 * @param	spc	espace entre les caractères
		 */
		public function emarger(g:int, d:int, h:int, b:int, indent:Number, inlgn:Number, spc:Number):void
		{
			gauche = g;
			droite = d;
			haut = h;
			bas = b;
			indentation = indent;
			interligne = inlgn;
			ecartement = spc;
		}
		
		/**
		 * Largeur totale des marges horizontales
		 */
		public function get horizontales():Number
		{
			return gauche + droite;
		}
		
		/**
		 * Hauteur totale des marges verticales
		 */
		public function get verticales():Number
		{
			return haut + bas;
		}
		
		/**
		 * Marge de gauche
		 */
		public function get gauche():Number
		{
			return _val["gauche"];
		}
		
		public function set gauche(value:Number):void
		{
			_val["gauche"] = value;
		}
		
		/**
		 * Marge de droite
		 */
		public function get droite():Number
		{
			return _val["droite"];
		}
		
		public function set droite(value:Number):void
		{
			_val["droite"] = value;
		}
		
		/**
		 * Marge du haut
		 */
		public function get haut():Number
		{
			return _val["haut"];
		}
		
		public function set haut(value:Number):void
		{
			_val["haut"] = value;
		}
		
		/**
		 * Marge du bas
		 */
		
		public function get bas():Number
		{
			return _val["bas"];
		}
		
		public function set bas(value:Number):void
		{
			_val["bas"] = value;
		}
		
		/**
		 * Indentation de début de paragraphe
		 */
		public function get indentation():Number
		{
			return _val["indentation"];
		}
		
		public function set indentation(value:Number):void
		{
			_val["indentation"] = value;
		}
		
		/**
		 * Espace supplémentaire vertical entre les lignes
		 */
		
		public function get interligne():Number
		{
			return _val["interligne"];
		}
		
		public function set interligne(value:Number):void
		{
			_val["interligne"] = value;
		}
		
		/**
		 * Espacement entre caractères
		 */
		public function get ecartement():Number
		{
			return _val["ecartement"];
		}
		
		public function set ecartement(value:Number):void
		{
			_val["ecartement"] = value;
		}
		/**
		 * Alignement horizontal du texte
		 */
		public function get alignHor():Pos
		{
			return _val["alignHor"];
		}
		
		public function set alignHor(value:Pos):void
		{
			_val["alignHor"] = value;
		}
		
		/**
		 * Alignement vertical du texte
		 */
		public function get alignVer():Pos
		{
			return _val["alignVer"];
		}
		
		public function set alignVer(value:Pos):void
		{
			_val["alignVer"] = value;
		}
	}
}